/*
 * Nodo.test.cpp
 *
 *  Created on: Apr 29, 2012
 *      Author: Nico
 */

using namespace std;

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>

#include "Nodo.cpp"

void forma1();
void forma2();

int main(int argc , char* argv[]) {
	//forma1(); return 0;
	//forma2(); return 0;
	
	
	Nodo<int>* unNodo = new Nodo<int>;
	Nodo<int>* otroNodo = new Nodo<int>;
	
	assert( unNodo->has_next() == false );
	
	
	unNodo->set_value(1);
	unNodo->set_next(otroNodo);
	
	assert( unNodo->has_next() == true );
	assert( otroNodo->has_next() == false );
	
	delete unNodo;
	delete otroNodo;
	
	return 0;
}


void forma1(){

	Nodo <int> unNodo;
	Nodo <int> otroNodo;
	
	unNodo.set_value(1);
	otroNodo.set_value(2);
	
	int x;
	unNodo.get_value(x);
	printf("Valor: %d\n",x);
	
	unNodo.set_next(&otroNodo);
	
	Nodo<int>* nodo3;
	unNodo.get_next(&nodo3);
	
	nodo3->get_value(x);
	printf("Valor nodo3: %d\n",x);
	
	Nodo<int>* unNodoNext;
	unNodo.get_next(&unNodoNext);
	Nodo<int>* nodoNull;
	nodo3->get_next(&nodoNull);
	
	if(unNodoNext == NULL){
		printf("unNodoNext Es NULL!\n");
	}else{
		printf("unNodoNext No es NULL\n");
	}
	
	if(nodoNull == NULL){
		printf("nodoNull Es NULL!\n");
	}else{
		printf("nodoNull No es NULL\n");
	}
}

void forma2(){
	Nodo<int>* unNodo = new Nodo<int>;
	
	unNodo->set_value(12);
	
	Nodo<int>* otroNodo = new Nodo<int>;
	
	otroNodo->set_value(15);
	
	unNodo->set_next(otroNodo);
	
	Nodo<int>* ultimoNodo = new Nodo<int>;
	ultimoNodo->set_value(19);
	otroNodo->set_next(ultimoNodo);
	
	
	// Recorro los nodos como lo haria una lista enlazada
	Nodo<int>* nodo_aux = unNodo;
	Nodo<int>* next_nodo_aux;
	int val;
	while(true){
		nodo_aux->get_value(val);
		printf("%d " , val );
		nodo_aux->get_next(&next_nodo_aux);
		if( next_nodo_aux == NULL ) break;
		
		nodo_aux = next_nodo_aux;
	}
	cout<<endl;

}
